package dw;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;

public class Processor extends Thread {
	private Socket socket;
	private InputStream in;
	private PrintStream out;
    private final static String webRoot="c:\\mywebroot";
	public Processor(Socket socket) {
		this.socket = socket;
		try {
			this.in = socket.getInputStream();
			this.out = new PrintStream(socket.getOutputStream());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void run() {
		String fileName=parse(in);
		this.sendFile(fileName);
	}
    public String parse(InputStream in){
    	BufferedReader br=new BufferedReader(new InputStreamReader(in));
    	String fileName=null;
    	try {
			String httpMessage=br.readLine();
			String[] content=httpMessage.split(" ");
			if(content.length!=3){
				this.sendErrorMessage(400, "Client Query Error!");
				return null;
			}
			//System.out.println(content[0]+","+content[1]+","+content[2]);
			fileName=content[1];
			
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return fileName;
    }
	public void sendErrorMessage(int errorCode, String errorMessage) {
		out.println("HTTP/1.0 "+errorCode+" "+errorMessage);
		out.println("content-type:text/html");
		out.println();
		out.println("<html><head><title>Error Message</title></head>");
		out.println("<body>");
		out.println("<h1>ErrorCode:"+errorCode+",Message:"+errorMessage+"</h1>");
		out.println("</body></html>");
		out.flush();
		out.close();
		try {
			in.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public void sendFile(String fileName) {
		File file=new File(webRoot+fileName);
		if(!file.exists()){
			this.sendErrorMessage(404, "File Not Found");
			return;
		}
		try {
			InputStream in=new FileInputStream(file);
			byte[] content=new byte[(int)file.length()];
			in.read(content);
			out.println("HTTP/1.0 200 queryfile");
			out.println("content-length:"+content.length);
			out.println();
			out.write(content);
			out.flush();
			out.close();
			in.close();
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		

	}
}
